//********************************************************************************************************
// Product Name: MapWindow.Interfaces Alpha
// Description:  Low level interfaces that allow separate components to use objects that are defined
//               in completely independant libraries so long as they satisfy the basic interface requirements.
//********************************************************************************************************
// The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); 
// you may not use this file except in compliance with the License. You may obtain a copy of the License at 
// http://www.mozilla.org/MPL/ 
//
// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
// ANY KIND, either express or implied. See the License for the specificlanguage governing rights and 
// limitations under the License. 
//
// The Original Code is MapWindow.Interfaces
//
// The Initial Developer of this Original Code is Ted Dunsford. Created in August, 2007.
// 
// Contributor(s): (Open source contributors should list themselves and their modifications here). 
//
//********************************************************************************************************
using System;
using System.Collections.Generic;
using System.Text;

namespace MapWindow.Drawing
{

    /// <summary>
    /// This contains the set of symbology members that are shared
    /// between points, lines and polygons.
    /// </summary>
    public interface IFeatureSymbolizer : IRenderable2D
    {
        /// <summary>
        /// Gets or sets the outline around the shape.
        /// This will also change the color of the Border pen.
        /// </summary>
        System.Drawing.Color BorderColor
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the thickness of the borders that will be drawn.
        /// this will also change the thickness setting of the 
        /// Border Pen.
        /// </summary>
        float BorderWidth
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the pen to use when drawing the borders.
        /// </summary>
        System.Drawing.Pen BorderPen
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets whether or not a border will be drawn around this feature.
        /// </summary>
        bool BorderVisible
        {
            get;
            set;
        }

        /// <summary>
        /// Clears any drawing characteristics that exist for this specific point.
        /// It will default back to the original.
        /// </summary>
        void Clear();
       

        /// <summary>
        /// Gets or sets the color of the brush used to fill the shape.
        /// Setting this will change the brush to a new SolidBrush.
        /// </summary>
        System.Drawing.Color FillColor
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the brush used to fill the shape.
        /// </summary>
        System.Drawing.Brush FillBrush
        {
            get;
            set;
        }

        /// <summary>
        /// Gets a boolean value.  If the value is true, then the default symbolizer
        /// is being used.  If the value is false, then a new PolygonSymbolizer
        /// exists describing this specific shape, but any properties that are not
        /// explictly set will fall through to the properties on the original
        /// default symbolizer.
        /// </summary>
        bool IsEmpty
        {
            get;
        }

        /// <summary>
        /// Gets or sets a string name to help identify this Symbolizer
        /// </summary>
        string Name
        {
            get; 
            set;
        }

        /// <summary>
        /// Gets or sets a float value from 0 to 1 where 0 is completely transparent
        /// and 1 is completely solid.  Setting an alpha of a specific feature, like
        /// FillColor, to something less than 255 will control that feature's transparency
        /// without affecting the others.  The final transparency of the feature will
        /// be that alpha multiplied by this value and rounded to the nearest byte.
        /// </summary>
        float Opacity
        {
            get;
            set;
        }
       
        /// <summary>
        /// Gets or Sets a ScaleModes enumeration that determines whether non-coordinate drawing
        /// properties like width or size use pixels or world coordinates.  If pixels are
        /// specified, a back transform is used to approximate pixel sizes. 
        /// </summary>
        ScaleModes ScaleMode
        {
            get;
            set;
        }

    }
}

